//
//  CLLStatusViewModel.swift
//  CLWeiNo
//
//  Created by DDC on 2017/10/16.
//  Copyright © 2017年 DDC. All rights reserved.
//

import Foundation

/// 单条微博视图模型
class CLLStatusViewModel {
    
    // 微博信息
    var status:CLLStatus
    // 转发文本
    var retweetStr:String?
    // 点赞文本
    var likeStr:String?
    // 评论文本
    var commentStr:String?
    // 配图视图的尺寸
    var pictureViewSize = CGSize()
    // 如果是转发微博,原创微博一定没有图片！
    var picURLs:[CLLStatusPicture]?{
        return status.retweeted_status?.pic_urls ?? status.pic_urls
    }
    // 转发微博文本信息
    var retweetText:String?
    
    // 行高属性
    var rowHeight:CGFloat = 0
    
    init(model:CLLStatus) {
        
        self.status = model
        
        // 设置按钮显示文本
        retweetStr = countString(count: status.attitudes_count, defaultString: "转发")
        commentStr = countString(count: status.comments_count, defaultString: "评论")
        likeStr = countString(count: status.attitudes_count, defaultString: "赞")
        pictureViewSize = calPictureViewSize(count: picURLs?.count)
        // 设置被转发微博文本
        retweetText =  "@" + (status.retweeted_status?.user?.screen_name ?? "") +  ":" + (status.retweeted_status?.text ?? "")
        // 加载行高
        updateViewModelRowHeight()
    }
    
    /// 通过图片数量来计算视图区域的大小尺寸
    ///
    /// - Parameter count: 图片个数
    /// - Returns: 返回的尺寸
    fileprivate func calPictureViewSize(count:Int?) -> CGSize{
        
        // 如果没有图片 直接返回空的尺寸
        if count == 0 || count == nil {
            return CGSize()
        }
        // 行数
        let row = (count! - 1) / 3 + 1
        // 图片视图的高度
        let statusPictureViewHeight = CGFloat(row) * statusPictureItemWidth + CGFloat(row - 1) * statusPictureInnerMarger + statusPictureOutterMargin
        
        return CGSize(width: statusPictureViewWidth, height: statusPictureViewHeight)
    }
    /// 通过返回的数据量来显示底部工具栏的数据/文字显示
    ///
    /// - Parameters:
    ///   - count: 操作数量
    ///   - defaultString: 默认文字
    /// - Returns: 返回显示的文本
    fileprivate func countString(count:Int , defaultString:String) -> String {
        
        if count == 0 {
            return defaultString
        }
        if count < 10000 {
            return count.description
        }
        return String(format: "%0.02万", count / 10000)
    }
    /// 更新图片尺寸
    ///
    /// - Parameter image: 更新之后的图片
    func updateSinglePicture(image:UIImage) {
        // 获取图片的尺寸
        var size = image.size
        
        // 处理过宽或者过窄的图片
        let maxWidth:CGFloat = 300
        let minWidth:CGFloat = 40
        // 过宽
        if size.width > maxWidth {
            // 设置最大显示宽度
            size.width = maxWidth
            // 高度等比例缩放
            size.height = size.width * image.size.height / image.size.width
        }
        if size.width < minWidth {
            // 设置最小显示宽度
            size.width = minWidth
            // 高度等比例增大显示
            size.height = size.width * image.size.height / image.size.width
        }
        size.height += statusPictureOutterMargin
        
        // 返回size为单张
        pictureViewSize = size
        // 根据单张现在的属性来缓存行高
        updateViewModelRowHeight()
    }
    // 缓存行高
    fileprivate func updateViewModelRowHeight(){
        /*
         原创: 顶部分隔视图(12)+margin(12)+头像的高度(34)+margin+正文的高度(需要计算)+配图视图高度(计算)+margin+底部工具栏(35)
         转发: 顶部分隔视图(12)+margin+(12)+头像的高度(34)+margin+正文的高度+margin+margin+转发文本(需要计算)+配图视图高度+margin+底部工具栏(35)
         */
        
        // 设置常量属性
        let margin = CGFloat(12)
        let iconHeight = CGFloat(34)
        let toolbarHeight = CGFloat(35)
        let textSize = CGSize(width: UIScreen.hm_screenWidth() - 2 * margin, height: CGFloat(MAXFLOAT))
        let textFont = UIFont.systemFont(ofSize: 14)
        // 头部视图
        rowHeight = (margin * 2 + iconHeight)
        // 原创正文
        if let text = status.text {
            
            rowHeight += (text as NSString).boundingRect(with: textSize, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName:textFont], context: nil).height
        }
        // 转发微博文本
        if status.retweeted_status != nil {
            // 有转发微博的cell
            if let text = status.retweeted_status?.text {
                // 计算转发微博的高度
                rowHeight += (text as NSString).boundingRect(with: textSize, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName:textFont], context: nil).height
            }
        }
        // 配图视图的高度
        rowHeight += margin * 2 + pictureViewSize.height
        
        // 底部工具栏
        rowHeight += toolbarHeight
        
    }
    
}
